package edu.upn.sowad.proyecto.dao;

import edu.upn.sowad.proyecto.entidades.ePersona;
import java.util.*;
import java.sql.*;

public class dPersona 
{
    private static ePersona Construir(ResultSet tabla) throws Exception {
        ePersona nuevo = new ePersona();
        nuevo.setIdPersona(tabla.getInt("IdPersona"));
        nuevo.setNombre(tabla.getString("Nombres"));
        nuevo.setApellidoPaterno(tabla.getString("ApellidoPaterno"));
        nuevo.setApellidoMaterno(tabla.getString("ApellidoMaterno"));
        nuevo.setDireccion(tabla.getString("Direccion"));
        nuevo.setTelefono(tabla.getString("Telefono"));
        nuevo.setCelular(tabla.getString("Celular"));
        nuevo.setCiudad(tabla.getString("Ciudad"));
        nuevo.setEstado(tabla.getBoolean("Estado"));
        return nuevo;
    }

    public static int InsertarPersona(ePersona objPersona) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {/*
             * PreparedStatement stm = cnn.prepareStatement("insert into
             * Persona(Nombres,ApellidoPaterno,ApellidoMaterno,Direccion,Telefono,Celular,Ciudad)"
             * + "values(?,?,?,?,?,?,?)"); stm.setString(1,
             * objPersona.getNombre()); stm.setString(2,
             * objPersona.getApellidoPaterno()); stm.setString(3,
             * objPersona.getApellidoMaterno()); stm.setString(4,
             * objPersona.getDireccion()); stm.setString(5,
             * objPersona.getTelefono()); stm.setString(6,
             * objPersona.getCelular()); stm.setString(7,
             * objPersona.getCiudad());
             */
            CallableStatement cstm = cnn.prepareCall("exec IngresarPersona '" + objPersona.getNombre() + "', '" + objPersona.getApellidoMaterno() + "', '" + objPersona.getApellidoPaterno() + "', '" + objPersona.getDireccion() + "', '" + objPersona.getTelefono() + "', '" + objPersona.getCelular() + "', '" + objPersona.getCiudad() + "'");
            int cont = cstm.executeUpdate();
            return cont;
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }

    public static int ModificarPersona(ePersona objPersona) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            String consulta = "UPDATE Persona SET Nombres='" + objPersona.getNombre() + "', "
                    + "ApellidoPaterno=" + objPersona.getApellidoPaterno() + ", "
                    + "ApellidoMaterno=" + objPersona.getApellidoMaterno() + ", "
                    + "Direccion='" + objPersona.getDireccion() + "', "
                    + "Telefono=" + objPersona.getTelefono() + ", "
                    + "Celular='" + objPersona.getCelular() + "' "
                    + "Telefono=" + objPersona.getTelefono() + ", "
                    + "Ciudad='" + objPersona.getCiudad() + "' "
                    + "WHERE IdPersona=" + objPersona.getIdPersona();
            PreparedStatement stm = cnn.prepareStatement(consulta);
            int cont = stm.executeUpdate();
            return cont;
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }

    public static Vector<ePersona> ListaPersonasClientes() throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            Vector<ePersona> lista = new Vector<ePersona>();
            Statement stm = cnn.createStatement();
            ResultSet tabla = stm.executeQuery("select * from Persona p inner join Usuario u on p.IdPersona=u.IdUsuario where u.Nivel ='C' and u.Estado='true'");
            while (tabla.next()) {
                lista.add(Construir(tabla));
            }
            return lista;
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }

    }

    public static int UltimoIdPersona() throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            int IdPersona = 0;
            //Statement stm = cnn.createStatement(); 
            //ResultSet tabla = stm.executeQuery("Select max(IdPersona) from Persona");
            CallableStatement cstm = cnn.prepareCall("exec UltimoIdPersona"); 
            ResultSet tabla = cstm.executeQuery();
            while (tabla.next()) {
                IdPersona = tabla.getInt("IdPersona");
            }
            return IdPersona;
            //int cont = cstm.executeUpdate();
            //return cont;
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }
}